git flow

在开发一个项目的时候,总是会遇到版本回退和版本客制化的问题,糟糕的分支管理会使整个开发过程痛苦不堪。版本管理的挑战:

  1. 如何开发一个Feature分支,又不影响其他的Feature分支?
  2. 分支多了如何管理,时间就了每个分支是干什么的?
  3. 哪些分支已经合并并回了主干?
  4. 如何进行Release分支的管理?开始一个Release的时候如何冻结Feature,如何在Prepare Release 的时候,开发人员可以继续新功能的开发?
  5. 线上代码除bug了,如何快速修复?而且修复的代码包含到开发人员的分支以及下一个Release?

下面介绍一种常见的工作流程 git flow

git flow 的特色在于为不同的分支分配明确的角色,并定义了使用场景和用法。

git flow 常用的分支
  • Master 分支
    这个分支显示的是最近发布到生产环境的代码,最近发布的Release, 该分支只能从其他分支合并代码,不能在这个分支直接修改代码
  • Develop 分支
    这个分支是我们的主开发分支,包含所有发布到一下个Release代码
  • Feature 分支
    这个分支主要用来开发一个新的功能,一旦开发完成,我们会合并到Develop分支进行下一个Release
  • Release 分支
    当需要发布一个新的Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,将其合并到Master和Develop分支
  • Hotfix 分支
    当发现产线上出来一个bug后,我们需要创建一个Hotfix分支完成bug修复,测试完成后,将该分支合并到Master和Develop分支,所以Hotfix的改动会进入下一个Release

    git flow 操作实践

    第一步: 创建一个develop分支,并把它推到服务器

1
2
git branch develop
git push -u origin develop

develop 分支将包含项目的所有历史。开发者可以clone中央仓库,并为develop分支创建一个追踪分支。

1
2
git clone ssh://......
git checkout -b develop origin/develop

第二步: 创建Feature分支

1
2
git checkout -b Featurename develop
git push -u origin Featurename

注意: Feature 的父分支应该选择develop

第三步: Feature分支的功能开发完成后(edit 、state、commit),将其合并到develop分支

1
2
3
4
git pull origin develop     //确保develop分支拥有最新代码
git checkout develop
git merge Featurename
git push

注意:新开发的功能代码永远不能直接合并到master分支。

第四步:创建Release分支,做产品发布准备

1
2
git checkout -b release develop
git push -u origin release

这个分支专门用于发布前准备,包括一些清理工具、全面测试、文档的更新及准备工作。

第五步:测试通过后,就可以将Release分支上的内容合并到master和develop分支上。

1
2
3
4
5
6
git checkout master
git merge release
git push
git checkout develop
git merge release
git push

注意: Release保持最新版本的代码,该分支扮演着开发和生产之间的一个缓冲。无论什么时候把一些东西合并到master分支,都需要打一个tag

1
2
git tag -a v1.0.0 -m "版本v1.0.0" master
git push --tags

第六步: 当产品线出现bug后

1
git checkout -b hotfix master

第七步:完成bug修复后,并通过测试,将hotfix分支上的内容合并到master/develop

1
2
3
4
5
6
7
git checkout master
git merge hotfix
git push
git checkout develop
git merge hotfix
git push
git branch - d hotfix

第八步: 基于master分支,打tag

1
2
git tag -a v1.0.0/fix  master
git push --tags
git flow 工具
  1. 安装
1
brew install git-flow
  1. 初始化
1
git flow init

这个命令会进行一些默认的配置,自动创建master、develop、feature、release、hotfix分支。当进行新功能开发的时候,可以

1
git flow feature start Featurename

完成开发后

1
git flow feature finish Featurename

该命令会将feature/Featurename 合并到develop分支,并删除feature分支。

  1. 当功能点都完成后,基于develop分支创建一个release分支
1
2
git flow release start v1.0.0
git flow release finish v1.0.0

注:当完成(finish)一个发布分支时,它会把release分支上的内容合并到master分支,同时合并回develop分支,打tag。之后我们只需要把master和tag都推到远程仓库就行。

  1. 当产线出现bug,需要紧急修复时。
1
git flow hotfix start v1.0.0

完成bug修复后

1
git flow hotfix finish v1.0.0

注:当完成(finish)一个修复分支时,它会把hotfix分支上的内容合并到master分支,同时合并回develop分支。

参考:https://www.cnblogs.com/cnblogsfans/p/5075073.html